import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class TestJDBCSelect {
    public static void main(String[] args) throws SQLException {
        //1、创建数据源
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/java?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("123456");

        // 2、建立连接
        Connection connection = dataSource.getConnection();

        //3、构建SQL语句
        String sql = "select * from student";

        //4、将字符串风格的SQL语句包装秤 “语句对象"
        PreparedStatement preparedStatement= connection.prepareStatement(sql);

        //5、执行SQL语句，与之不同的是 select 的执行方法是 executeQuery()
        //查询操作我们都知道它返回是一个临时表。
        // 所以用来接收的变量类型 不能是 常见的数据类型了。
        ResultSet resultSet = preparedStatement.executeQuery();
        //executeQuery 的返回值类型根据  点击进入原码就可以知道为 ResultSet 类型。
        // 获取数据的思路：先获取到每一行，再获取到这一行中的若干列

        // 通过next 方法，来获取到一行记录，同时把光标往后移动一行。
        // 如果遍历到表的结束为止，此处的 next 直接返回 false.
        // 循环条件为假，终止循环。
        // 下面是 student 表 全列查询的结果
//              +------+--------+
//              | id   | name   |
//              +------+--------+
//              |    2 | 王五   |
//              |    6 | 赵六   |
//              +------+--------+
        while(resultSet.next()){
            int id = resultSet.getInt("id");
            String name = resultSet.getString("name");
            System.out.println("id = " + id + ", name = " + name);
        }
        preparedStatement.close();
        connection.close();
    }
}
